#include<bits/stdc++.h>
using namespace std;
const int N=12;

int n;
bool solid[N][N];
int arr[N][N];
map<int,int> mpr,mpc;

bool check(int r,int c){
    int v=arr[r][c];
    if(r>=3){
        if(arr[r-1][c]==v&&arr[r-2][c]==v){
            return false;
        }
    }
    if(c>=3){
        if(arr[r][c-1]==v&&arr[r][c-2]==v){
            return false;
        }
    }
    if(r==n){
        int amount[2]={0,0};
        int v1=0;
        for(int i=1;i<=n;i++){
            amount[arr[i][c]]++;
            v1*=2;
            v1+=arr[i][c];
        }
        if(amount[0]!=n/2||amount[1]!=n/2) return false;

        if(mpc.count(v1)&&mpc[v1]==1){
            return false;
        }
        mpc[v1]=1;
    }
    if(c==n){
        int amount[2]={0,0};
        int v1=0;
        for(int i=1;i<=n;i++){
            v1*=2;
            v1+=arr[r][i];
            amount[arr[r][i]]++;
        }
        if(amount[0]!=n/2||amount[1]!=n/2) return false;

        if(mpr.count(v1)&&mpr[v1]==1) return false;
        mpc[v1]=1;
    }
    return true;
}

void dfs(int r,int c){
    cout<<r<<' '<<c<<endl;
    for(int i=1;i<=r;i++){
        for(int j=1;j<=n;j++){
            cout<<arr[i][j];
        }
        cout<<endl;
    }
    //output
    if(r==n+1){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                cout<<arr[i][j];
            }
            cout<<endl;
        }
        exit(0);
    }
    //
    int rn=r,cn=c+1;
    if(cn>n){
        rn=r+1;
        cn=1;
    }

    if(solid[r][c]==true){
        bool p=check(r,c);
        if(p){
            dfs(rn,cn);
        }
    }
    else{
        arr[r][c]=0;
        if(check(r,c)){
            dfs(rn,cn);
        }
        arr[r][c]=1;
        if(check(r,c)){
            dfs(rn,cn);
        }
    }
    //reset
    if(r==n){
        int v1=0;
        for(int i=1;i<=n;i++){
            v1*=2;
            v1+=arr[i][c];
        }
        mpc[v1]=0;
    }
    if(c==n){
        int v1=0;
        for(int i=1;i<=n;i++){
            v1*=2;
            v1+=arr[r][i];
        }
        mpr[v1]=0;
    }
    return;
}

int main(){
    cin>>n;
    memset(solid,0,sizeof(solid));
    for(int i=1;i<=n;i++){
        string str;
        cin>>str;
        for(int j=0;str[j]!='\0';j++)
        {
            int k=j+1;
            if(str[j]=='0'||str[j]=='1'){
                solid[i][k]=true;
                arr[i][k]=str[j]-'0';
            }
            else{
                solid[i][k]=false;
                arr[i][k]=-1;
            }
        }
    }
    dfs(1,1);
    return 0;
}